// 给定一个包含非负整数的数组nums，其中nums[i] 表示第i条边的边长,要求统计数组中可以组成三角形三条边的三元组个数

// 思路，双指针，构成三角形可以满足两边之和大于第三边，那么我们把数组排成升序
// 用left和right指针分别指向区间的起点和终点
// 每遍历一次第三条边就按上述统计一轮
// 时间复杂度：O(n^2)
// 空间复杂度：O(1)

function triangleNumber(arr) {
    arr.sort((a, b) => a - b)
    let ans = 0
    for (let i = 2; i < arr.length; i++) {
        let left = 0
        let right = i - 1
        while (left < right) {
            if (arr[left] + arr[right] <= arr[i]) {
                left++
            } else {
                ans += right - left
                right--
            }
        }
    }
    return ans
}

let arr = [4,2,3,4]
console.log(triangleNumber(arr))
